home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 5_2007-2008.ISO / data / Zips / xp-setup_v2140951202009.psc / class module / Registry Functions.cls < prev   
Text File  |  2008-12-31  |  15KB  |  399 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "RegistryFunctions"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. Option Explicit
  15.  
  16. Private Type FILETIME
  17. lLowDateTime    As Long
  18. lHighDateTime   As Long
  19. End Type
  20. Private lDataSize As Long
  21. Private lBufferSize As Long
  22. Private ByteArray() As Byte
  23. Private DisplayErrorMsg As Boolean
  24. Private hKey As Long, MainKeyHandle As Long
  25. Private rtn As Long, lBuffer As Long, sBuffer As String
  26. Private Const REG_SZ = 1&
  27. Private Const REG_NONE = 0&
  28. Private Const REG_LINK = 6&
  29. Private Const REG_DWORD = 4&
  30. Private Const REG_BINARY = 3&
  31. Private Const REG_MULTI_SZ = 7&
  32. Private Const REG_EXPAND_SZ = 2&
  33. Private Const REG_RESOURCE_LIST = 8&
  34. Private Const ERROR_SUCCESS = 0&
  35. Private Const ERROR_BADDB = 1009&
  36. Private Const ERROR_BADKEY = 1010&
  37. Private Const ERROR_MORE_DATA = 234&
  38. Private Const ERROR_CANTOPEN = 1011&
  39. Private Const ERROR_CANTREAD = 1012&
  40. Private Const ERROR_CANTWRITE = 1013&
  41. Private Const ERROR_OUTOFMEMORY = 14&
  42. Private Const ERROR_ACCESS_DENIED = 5&
  43. Private Const REG_DWORD_BIG_ENDIAN = 5&
  44. Private Const ERROR_NO_MORE_ITEMS = 259&
  45. Private Const REG_DWORD_LITTLE_ENDIAN = 4&
  46. Private Const ERROR_INVALID_PARAMETER = 87&
  47. Private Const REG_FULL_RESOURCE_DESCRIPTOR = 9&
  48. Private Const REG_RESOURCE_REQUIREMENTS_LIST = 10&
  49. Private Const KEY_NOTIFY = &H10&
  50. Private Const WRITE_DAC = &H40000
  51. Private Const KEY_SET_VALUE = &H2&
  52. Private Const WRITE_OWNER = &H80000
  53. Private Const KEY_QUERY_VALUE = &H1&
  54. Private Const READ_CONTROL = &H20000
  55. Private Const SYNCHRONIZE = &H100000
  56. Private Const KEY_CREATE_LINK = &H20&
  57. Private Const KEY_CREATE_SUB_KEY = &H4&
  58. Private Const KEY_ENUMERATE_SUB_KEYS = &H8&
  59. Private Const STANDARD_RIGHTS_REQUIRED = &HF0000
  60. Private Const STANDARD_RIGHTS_READ = READ_CONTROL
  61. Private Const STANDARD_RIGHTS_WRITE = READ_CONTROL
  62. Private Const STANDARD_RIGHTS_EXECUTE = READ_CONTROL
  63. Private Const KEY_READ = STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY
  64. Private Const KEY_WRITE = STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY
  65. Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
  66. Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
  67. Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
  68. Private Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, lpSecurityAttributes As Any, phkResult As Long, lplDisposition As Long) As Long
  69. Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
  70. Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
  71. Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
  72. Private Declare Function RegQueryValueExA Lib "advapi32.dll" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByRef lpData As Long, lpcbData As Long) As Long
  73. Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long
  74. Private Declare Function RegSetValueExA Lib "advapi32.dll" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByRef lpData As Long, ByVal cbData As Long) As Long
  75. Private Declare Function RegSetValueExB Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByRef lpData As Byte, ByVal cbData As Long) As Long
  76.  
  77. Private Sub Class_Initialize()
  78. DisplayErrorMsg = False
  79. End Sub
  80.  
  81. Public Property Let SetDisplayErrorMsg(vNewValue As Variant)
  82. DisplayErrorMsg = vNewValue
  83. End Property
  84.  
  85. Public Function SetDWordValue(ByVal sKey As String, ByVal sKeyName As String, ByVal KeyValue As Long)
  86. SetDWordValue = False
  87. Call ParseKey(sKey, MainKeyHandle)
  88. If MainKeyHandle Then
  89.     rtn = RegOpenKeyEx(MainKeyHandle, sKey, 0, KEY_READ, hKey)
  90.     If Not rtn = ERROR_SUCCESS Then
  91.         rtn = RegCreateKey(MainKeyHandle, sKey, hKey)
  92.         rtn = RegCloseKey(hKey)
  93.     End If
  94.     rtn = RegOpenKeyEx(MainKeyHandle, sKey, 0, KEY_WRITE, hKey)
  95.     If rtn = ERROR_SUCCESS Then
  96.         rtn = RegSetValueExA(hKey, sKeyName, 0, REG_DWORD, KeyValue, 4)
  97.         If Not rtn = ERROR_SUCCESS Then
  98.             If DisplayErrorMsg = True Then
  99.                 MsgBox GetErrorMsg(rtn), vbExclamation
  100.             End If
  101.         Else
  102.             SetDWordValue = True
  103.         End If
  104.         rtn = RegCloseKey(hKey)
  105.     Else
  106.         If DisplayErrorMsg = True Then
  107.             MsgBox GetErrorMsg(rtn), vbExclamation
  108.         End If
  109.     End If
  110. End If
  111. End Function
  112.  
  113. Public Function GetDWordValue(ByVal sKey As String, ByVal sKeyName As String)
  114. Call ParseKey(sKey, MainKeyHandle)
  115. eon = True
  116. If MainKeyHandle Then
  117.     rtn = RegOpenKeyEx(MainKeyHandle, sKey, 0, KEY_READ, hKey)
  118.     If rtn = ERROR_SUCCESS Then
  119.         rtn = RegQueryValueExA(hKey, sKeyName, 0, REG_DWORD, lBuffer, 4)
  120.         If rtn = ERROR_SUCCESS Then
  121.             rtn = RegCloseKey(hKey)
  122.             eon = True
  123.             GetDWordValue = lBuffer
  124.         Else
  125.             GetDWordValue = "Error"
  126.             eon = False
  127.             If DisplayErrorMsg = True Then
  128.                 MsgBox GetErrorMsg(rtn), vbExclamation
  129.             End If
  130.         End If
  131.     Else
  132.         GetDWordValue = "Error"
  133.         eon = False
  134.         If DisplayErrorMsg = True Then
  135.             MsgBox GetErrorMsg(rtn), vbExclamation
  136.         End If
  137.     End If
  138. End If
  139. End Function
  140.  
  141. Public Function SetBinaryValue(ByVal sKey As String, ByVal sKeyName As String, KeyValue As String)
  142. Dim i As Long
  143. SetBinaryValue = False
  144. Call ParseKey(sKey, MainKeyHandle)
  145. If MainKeyHandle Then
  146.     rtn = RegOpenKeyEx(MainKeyHandle, sKey, 0, KEY_WRITE, hKey)
  147.     If rtn = ERROR_SUCCESS Then
  148.         lDataSize = Len(KeyValue)
  149.         ReDim ByteArray(lDataSize)
  150.         For i = 1 To lDataSize
  151.             ByteArray(i) = Asc(Mid$(KeyValue, i, 1))
  152.         Next
  153.         rtn = RegSetValueExB(hKey, sKeyName, 0, REG_BINARY, ByteArray(1), lDataSize)
  154.         If Not rtn = ERROR_SUCCESS Then
  155.             If DisplayErrorMsg = True Then
  156.                 MsgBox GetErrorMsg(rtn), vbExclamation
  157.             End If
  158.         Else
  159.             SetBinaryValue = True
  160.         End If
  161.         rtn = RegCloseKey(hKey)
  162.     Else
  163.         If DisplayErrorMsg = True Then
  164.             MsgBox GetErrorMsg(rtn), vbExclamation
  165.         End If
  166.     End If
  167. End If
  168. End Function
  169.  
  170. Public Function GetBinaryValue(ByVal sKey As String, ByVal sKeyName As String)
  171. Call ParseKey(sKey, MainKeyHandle)
  172. eon = True
  173. If MainKeyHandle Then
  174.     rtn = RegOpenKeyEx(MainKeyHandle, sKey, 0, KEY_READ, hKey)
  175.     If rtn = ERROR_SUCCESS Then
  176.         lBufferSize = 1
  177.         rtn = RegQueryValueEx(hKey, sKeyName, 0, REG_BINARY, 0, lBufferSize)
  178.         sBuffer = Space(lBufferSize)
  179.         rtn = RegQueryValueEx(hKey, sKeyName, 0, REG_BINARY, sBuffer, lBufferSize)
  180.         If rtn = ERROR_SUCCESS Then
  181.             rtn = RegCloseKey(hKey)
  182.             eon = True
  183.             GetBinaryValue = sBuffer
  184.         Else
  185.             GetBinaryValue = "Error"
  186.             eon = False
  187.             If DisplayErrorMsg = True Then
  188.                 MsgBox GetErrorMsg(rtn), vbExclamation
  189.             End If
  190.         End If
  191.     Else
  192.         GetBinaryValue = "Error"
  193.         eon = False
  194.         If DisplayErrorMsg = True Then
  195.             MsgBox GetErrorMsg(rtn), vbExclamation
  196.         End If
  197.     End If
  198. End If
  199. End Function
  200.  
  201. Public Function SetStringValue(ByVal sKey As String, ByVal sKeyName As String, ByVal KeyValue As String)
  202. SetStringValue = False
  203. Call ParseKey(sKey, MainKeyHandle)
  204. If MainKeyHandle Then
  205.     rtn = RegOpenKeyEx(MainKeyHandle, sKey, 0, KEY_READ, hKey)
  206.     If Not rtn = ERROR_SUCCESS Then
  207.         rtn = RegCreateKey(MainKeyHandle, sKey, hKey)
  208.         rtn = RegCloseKey(hKey)
  209.     End If
  210.     rtn = RegOpenKeyEx(MainKeyHandle, sKey, 0, KEY_WRITE, hKey)
  211.     If rtn = ERROR_SUCCESS Then
  212.         rtn = RegSetValueEx(hKey, sKeyName, 0, REG_SZ, ByVal KeyValue, Len(KeyValue))
  213.         If Not rtn = ERROR_SUCCESS Then
  214.             If DisplayErrorMsg = True Then
  215.                 MsgBox GetErrorMsg(rtn), vbExclamation
  216.             End If
  217.         Else
  218.             SetStringValue = True
  219.         End If
  220.         rtn = RegCloseKey(hKey)
  221.     Else
  222.         If DisplayErrorMsg = True Then
  223.             MsgBox GetErrorMsg(rtn), vbExclamation
  224.         End If
  225.     End If
  226. End If
  227. End Function
  228.  
  229. Public Function GetStringValue(ByVal sKey As String, ByVal sKeyName As String)
  230. lBufferSize = 0
  231. sBuffer = ""
  232. Call ParseKey(sKey, MainKeyHandle)
  233. eon = True
  234. If MainKeyHandle Then
  235.     rtn = RegOpenKeyEx(MainKeyHandle, sKey, 0, KEY_READ, hKey)
  236.     If rtn = ERROR_SUCCESS Then
  237.         sBuffer = Space(255)
  238.         lBufferSize = Len(sBuffer)
  239.         rtn = RegQueryValueEx(hKey, sKeyName, 0, REG_SZ, sBuffer, lBufferSize)
  240.         If rtn = ERROR_SUCCESS Then
  241.             rtn = RegCloseKey(hKey)
  242.             sBuffer = Trim(sBuffer)
  243.             GetStringValue = Left(sBuffer, lBufferSize - 1)
  244.             eon = True
  245.         Else
  246.             GetStringValue = "Error"
  247.             eon = False
  248.             If DisplayErrorMsg = True Then
  249.                 MsgBox GetErrorMsg(rtn), vbExclamation
  250.             End If
  251.         End If
  252.     Else
  253.         eon = False
  254.         GetStringValue = "Error"
  255.         If DisplayErrorMsg = True Then
  256.             MsgBox GetErrorMsg(rtn), vbExclamation
  257.         End If
  258.     End If
  259. End If
  260. End Function
  261.  
  262. Public Function CreateKey(ByVal sKey As String)
  263. CreateKey = False
  264. Call ParseKey(sKey, MainKeyHandle)
  265. If MainKeyHandle Then
  266.     rtn = RegCreateKey(MainKeyHandle, sKey, hKey)
  267.     If rtn = ERROR_SUCCESS Then
  268.         rtn = RegCloseKey(hKey)
  269.         CreateKey = True
  270.     End If
  271. End If
  272. End Function
  273.  
  274. Public Function DeleteKey(ByVal Keyname As String)
  275. DeleteKey = False
  276. Call ParseKey(Keyname, MainKeyHandle)
  277. If MainKeyHandle Then
  278.     rtn = RegDeleteKey(MainKeyHandle, Keyname)
  279.     If (rtn <> ERROR_SUCCESS) Then
  280.         If DisplayErrorMsg = True Then
  281.             MsgBox GetErrorMsg(rtn), vbExclamation, App.Title
  282.         End If
  283.     Else
  284.         DeleteKey = True
  285.     End If
  286. End If
  287. End Function
  288.  
  289. Public Function DeleteKeyValue(ByVal sKeyName As String, ByVal sValueName As String)
  290. DeleteKeyValue = False
  291. Dim hKey As Long
  292. Call ParseKey(sKeyName, MainKeyHandle)
  293. If MainKeyHandle Then
  294.     rtn = RegOpenKeyEx(MainKeyHandle, sKeyName, 0, KEY_WRITE, hKey)
  295.     If (rtn = ERROR_SUCCESS) Then
  296.         rtn = RegDeleteValue(hKey, sValueName)
  297.         If (rtn <> ERROR_SUCCESS) Then
  298.             If DisplayErrorMsg = True Then
  299.                 MsgBox GetErrorMsg(rtn), vbExclamation, App.Title
  300.             End If
  301.         Else
  302.             DeleteKeyValue = True
  303.         End If
  304.         rtn = RegCloseKey(hKey)
  305.     End If
  306. End If
  307. End Function
  308.  
  309. Public Function KeyExist(ByVal sKey As String)
  310. Dim KeyExits As Boolean
  311. Dim hKey As Long
  312. Call ParseKey(sKey, MainKeyHandle)
  313. If MainKeyHandle Then
  314.     rtn = RegOpenKeyEx(MainKeyHandle, sKey, 0, KEY_READ, hKey)
  315.     If rtn = ERROR_SUCCESS Then
  316.         KeyExist = True
  317.     Else
  318.         KeyExits = False
  319.     End If
  320. End If
  321. End Function
  322.  
  323. Public Function KeyValueExist(ByVal sKey As String, ByVal sKeyName As String)
  324. Dim hKey As Long
  325. Dim lSize As Long
  326. Dim sTmp As String
  327. Dim lActualType As Long
  328. Call ParseKey(sKey, MainKeyHandle)
  329. If MainKeyHandle Then
  330.     rtn = RegOpenKeyEx(MainKeyHandle, sKey, 0, KEY_READ, hKey)
  331.     If (rtn = ERROR_SUCCESS) Then
  332.         rtn = RegQueryValueEx(hKey, ByVal sKeyName, 0&, lActualType, sTmp, lSize)
  333.         If (rtn = ERROR_SUCCESS) Then
  334.             KeyValueExist = True
  335.         Else
  336.             KeyValueExist = False
  337.         End If
  338.     End If
  339. End If
  340. End Function
  341.  
  342. Private Sub ParseKey(Keyname As String, Keyhandle As Long)
  343. rtn = InStr(Keyname, "\")
  344. If Left(Keyname, 5) <> "HKEY_" Or Right(Keyname, 1) = "\" Then
  345.     MsgBox "Incorrect Format: " + Chr(10) + Chr(10) + Keyname
  346.     Exit Sub
  347. ElseIf rtn = 0 Then
  348.     Keyhandle = GetMainKeyHandle(Keyname)
  349.     Keyname = ""
  350. Else
  351.     Keyhandle = GetMainKeyHandle(Left(Keyname, rtn - 1))
  352.     Keyname = Right(Keyname, Len(Keyname) - rtn)
  353. End If
  354. End Sub
  355.  
  356. Private Function GetMainKeyHandle(MainKeyName As String) As Long
  357. Select Case MainKeyName
  358. Case "HKEY_CLASSES_ROOT"
  359.     GetMainKeyHandle = HKEY_CLASSES_ROOT
  360. Case "HKEY_CURRENT_USER"
  361.     GetMainKeyHandle = HKEY_CURRENT_USER
  362. Case "HKEY_LOCAL_MACHINE"
  363.     GetMainKeyHandle = HKEY_LOCAL_MACHINE
  364. Case "HKEY_USERS"
  365.     GetMainKeyHandle = HKEY_USERS
  366. Case "HKEY_PERFORMANCE_DATA"
  367.     GetMainKeyHandle = HKEY_PERFORMANCE_DATA
  368. Case "HKEY_CURRENT_CONFIG"
  369.     GetMainKeyHandle = HKEY_CURRENT_CONFIG
  370. Case "HKEY_DYN_DATA"
  371.     GetMainKeyHandle = HKEY_DYN_DATA
  372. End Select
  373. End Function
  374.  
  375. Private Function GetErrorMsg(lErrorCode As Long) As String
  376. Select Case lErrorCode
  377. Case 1009, 1015
  378.      GetErrorMsg = "The Registry Database Is Corrupt!"
  379. Case 2, 1010
  380.      GetErrorMsg = "Bad Key Name"
  381. Case 1011
  382.      GetErrorMsg = "Can't Open Key"
  383. Case 4, 1012
  384.      GetErrorMsg = "Can't Read Key"
  385. Case 5
  386.      GetErrorMsg = "Access To this key Is Denied"
  387. Case 1013
  388.      GetErrorMsg = "Can't Write Key"
  389. Case 8, 14
  390.      GetErrorMsg = "Out Of memory"
  391. Case 87
  392.      GetErrorMsg = "Invalid Parameter"
  393. Case 234
  394.      GetErrorMsg = "There Is More Data Than The Buffer Has Been Allocated To Hold"
  395. Case Else
  396.      GetErrorMsg = "Undefined Error Code : " & Str$(lErrorCode)
  397. End Select
  398. End Function
  399.